package com.example.designpatterns.proxy;

/**
 * RealImage类 - 真实主题类，实现了Image接口
 * 包含了真正的业务逻辑，代理类会将请求委托给此类
 */
public class RealImage implements Image {
    private String filename;
    private long size;
    private boolean isLoaded;
    
    /**
     * 创建RealImage对象时，需要从磁盘加载图像，这是一个耗时操作
     * @param filename 图像文件名
     */
    public RealImage(String filename) {
        this.filename = filename;
        this.size = calculateImageSize(filename);
        // 在构造函数中就加载图像，这可能是一个耗时操作
        loadFromDisk();
    }
    
    /**
     * 模拟从磁盘加载图像，这是一个耗时操作
     */
    private void loadFromDisk() {
        System.out.println("加载图像：" + filename + "（大小：" + size + " KB）");
        
        // 模拟加载延迟
        try {
            // 图像越大，加载时间越长
            // 以KB为单位的大小除以10作为延迟的毫秒数
            Thread.sleep(size / 10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        isLoaded = true;
        System.out.println("图像加载完成：" + filename);
    }
    
    /**
     * 模拟计算图像文件大小（KB）
     * @param filename 图像文件名
     * @return 文件大小（KB）
     */
    private long calculateImageSize(String filename) {
        // 根据文件名长度生成一个模拟的文件大小（仅用于演示）
        return filename.length() * 50 + 100;
    }
    
    @Override
    public void display() {
        if (!isLoaded) {
            loadFromDisk();
        }
        System.out.println("显示图像：" + filename);
    }
    
    @Override
    public String getFilename() {
        return filename;
    }
    
    @Override
    public long getSize() {
        return size;
    }
} 